package test_achieve.courierapp;

import constant.Constant;
import org.junit.Assert;
import org.openqa.selenium.WebElement;
import util.tools.CommonTools;
import cucumber.api.PendingException;
import cucumber.api.java.en.Given;
import org.openqa.selenium.By;

import java.util.List;

/**
 * Created by chenkuo on 2017/7/25.
 */
public class Oneself {

    @Given("^进入闪送员主页面$")
    public void 进入闪送员主页面() throws Throwable {
        进入我的闪送页面();
        Constant.driverCourier.findElement(By.id("com.ishansong:id/custom_title_btn_left")).click();//返回到主页面

    }

    @Given("^进入我的闪送页面$")
    public void 进入我的闪送页面() throws Throwable {
        for (int i = 0; i < 4; i++) {
            if (CommonTools.checkElementExit(Constant.driverCourier,"name","我的闪送")) {//查看是否在“我的闪送”页面
                return;
            } else{
                returnHomePage();
            }
        }
    }

    /**不同返回类型操作*/

    private void returnHomePage(){
        if (CommonTools.checkElementExit(Constant.driverCourier,"id","custom_title_btn_left"))//判断返回按钮
        {
            Constant.driverCourier.findElement(By.id("custom_title_btn_left")).click();
        } else if (CommonTools.checkElementExit(Constant.driverCourier,"id","menu_right")) {//判断第二种返回按钮
            Constant.driverCourier.findElement(By.id("menu_right")).click();
        } else {
            Constant.driverCourier.pressKeyCode(4);
        }

    }

    @Given("^进入更多设置$")
    public void 进入更多设置() throws Throwable {
        点击更多设置();
        // Write code here that turns the phrase above into concrete actions
//        throw new PendingException();
    }
    private void 点击更多设置() {
        Constant.driverCourier.findElement(By.id("menu_left")).click();
    }

    @Given("^进入待抢单中$")
    public void 进入待抢单中() throws Throwable {
        Constant.driverCourier.findElement(By.id("btn_wait_grab")).click();//点击待抢单按钮
    }

    @Given("^打开听单$")
    public void openListening() throws Throwable {
        关闭听单();
//        判断是否有订单弹出
        for (int i = 0; i < 3; i++) {
            String btn = Constant.driverCourier.findElement(By.id("sb_work_status")).getAttribute("checked");
            if (btn.equals("false")) {
                Constant.driverCourier.findElement(By.id("sb_work_status")).click();//点击听单按钮
            }
        }
//        Constant.driverCourier.findElement(By.id("sb_work_status")).click();
    }

    @Given("^关闭听单$")
    public void 关闭听单() throws Throwable {
        进入闪送员主页面();
        for (int i = 0; i < 3; i++) {
            String btn = Constant.driverCourier.findElement(By.id("sb_work_status")).getAttribute("checked");
            if (btn.equals("true")) {
                Constant.driverCourier.findElement(By.id("sb_work_status")).click();//点击听单按钮
            }
        }
//        Constant.driverCourier.findElement(By.id("sb_work_status")).click();

    }

    @Given("^s仅听预约单$")
    public void s仅听预约单() throws Throwable {
        关闭听单();
        openListening();
        Constant.driverCourier.findElement(By.id("cb_realtime")).click();//关闭实时单
    }

    @Given("^仅听及时单$")
    public void 仅听及时单() throws Throwable {
        returnHomePage();
        关闭听单();
        openListening();
        Constant.driverCourier.findElement(By.id("cb_appoint")).click();//关闭预约单
    }

    @Given("^进入我的订单$")
    public void 进入我的订单() throws Throwable {
        进入我的闪送页面();
        点击我的订单();
    }

    @Given("^点击我的订单$")
    public void 点击我的订单() throws Throwable {
        Constant.driverCourier.findElement(By.id("item_mytask")).click();//点击我的订单
    }

    @Given("^点击现金账户$")
    public void 点击现金账户() throws Throwable {
        Constant.driverCourier.findElement(By.id("menu_right")).click();
        Constant.driverCourier.findElement(By.id("item_cash_account")).click();
    }

    @Given("^进入收支明细$")
    public void 进入收支明细() throws Throwable {
        进入我的闪送页面();
        点击现金账户();
        点击查看收支明细();

    }

    @Given("^点击查看收支明细$")
    public void 点击查看收支明细() throws Throwable {
        Constant.driverCourier.findElement(By.id("btn_cash_detail")).click();//点击查看收支明细
    }

    @Given("^向上滑动$")
    public void 向上滑动() throws Throwable {
        CommonTools.swipeUp(Constant.driverCourier);
        CommonTools.swipeUp(Constant.driverCourier);
        Thread.sleep(6000);

    }

    @Given("^进入现金账户$")
    public void 进入现金账户() throws Throwable {
        进入我的闪送页面();
        点击现金账户();
    }

    @Given("^进入交通工具$")
    public void 进入交通工具() throws Throwable {
        Constant.driverCourier.findElement(By.id("btn_vehicle")).click();//点击交通工具按钮
    }

    @Given("^提交交通工具$")
    public void 提交交通工具() throws Throwable {
        Constant.driverCourier.findElement(By.id("btn_submit")).click();//点击提交
    }

    @Given("^退出交通工具$")
    public void 退出交通工具() throws Throwable {
        Constant.driverCourier.findElement(By.id("custom_title_btn_left")).click();//点击返回按钮
    }

    @Given("^选择电动车$")
    public void 选择电动车() throws Throwable {
        for (int i = 0; i < 3; i++) {
            String btn = Constant.driverCourier.findElement(By.id("checkItem1")).getAttribute("checked");
            if (btn.equals("false")) {
                Constant.driverCourier.findElement(By.id("checkItem1")).click();//点击电动车
            }
        }
    }

    @Given("^选择摩托车$")
    public void 选择摩托车() throws Throwable {
        for (int i = 0; i < 3; i++) {
            String btn = Constant.driverCourier.findElement(By.id("checkItem2")).getAttribute("checked");
            if (btn.equals("false")) {
                Constant.driverCourier.findElement(By.id("checkItem2")).click();//点击电动车icon
            }
        }
    }

    @Given("^选择公共交通$")
    public void 选择公共交通() throws Throwable {
        for (int i = 0; i < 3; i++) {
            String btn = Constant.driverCourier.findElement(By.id("checkItem3")).getAttribute("checked");
            if (btn.equals("false")) {
                Constant.driverCourier.findElement(By.id("checkItem3")).click();//点击电动车icon
            }
        }
    }

    @Given("^选择汽车$")
    public void 选择汽车() throws Throwable {
        for (int i = 0; i < 3; i++) {
            String btn = Constant.driverCourier.findElement(By.id("checkItem4")).getAttribute("checked");
            if (btn.equals("false")) {
                Constant.driverCourier.findElement(By.id("checkItem4")).click();//点击电动车icon
            }
        }
    }

    @Given("^设置为电动车$")
    public void 设置为电动车() throws Throwable {
        进入交通工具();
        选择电动车();
        提交交通工具();
    }

    @Given("^设置为摩托车$")
    public void 设置为摩托车() throws Throwable {
        进入交通工具();
        选择摩托车();
        提交交通工具();
    }

    @Given("^设置为公共交通$")
    public void 设置为公共交通() throws Throwable {
        进入交通工具();
        选择公共交通();
        提交交通工具();
    }

    @Given("^设置为汽车$")
    public void 设置为汽车() throws Throwable {
        进入交通工具();
        选择汽车();
        提交交通工具();
    }

    @Given("^检查当前的交通方式为电动车$")
    public void 检查当前的交通方式为电动车() throws Throwable {
        进入交通工具();
        检查交通方式为电动车();
        returnHomePage();
    }

    public void 检查交通方式为电动车() {
        boolean btn = CommonTools.checkElementExit(Constant.driverCourier,"id","rlItem1");
        Assert.assertEquals(true,btn);
    }

    @Given("^检查当前的交通方式为摩托车$")
    public void 检查当前的交通方式为摩托车() throws Throwable {
        进入交通工具();
        检查交通方式为摩托车();
        returnHomePage();
    }

    public void 检查交通方式为摩托车() {
        boolean btn = CommonTools.checkElementExit(Constant.driverCourier,"id","rlItem2");
        Assert.assertEquals(true,btn);
    }

    @Given("^检查当前的交通方式为公共交通$")
    public void 检查当前的交通方式为公共交通() throws Throwable {
        进入交通工具();
        检查交通方式为公共交通();
        returnHomePage();
    }

    public void 检查交通方式为公共交通() {
        boolean btn = CommonTools.checkElementExit(Constant.driverCourier,"id","rlItem3");
        Assert.assertEquals(true,btn);
    }

    @Given("^检查当前的交通方式为汽车$")
    public void 检查当前的交通方式为汽车() throws Throwable {
        进入交通工具();
        检查交通方式为汽车();
        returnHomePage();
    }

    private void 检查交通方式为汽车() {
        boolean btn = CommonTools.checkElementExit(Constant.driverCourier,"id","rlItem4");
        Assert.assertEquals(true,btn);
    }

    @Given("^进入到我的订单中$")
    public void 进入到我的订单中() throws Throwable {

    }

    @Given("^断开手机与电脑连接$")
    public void 断开手机与电脑连接() throws Throwable {
        if(Constant.driverCourier !=null){
            Constant.driverCourier.quit();
        }
    }

    @Given("^进入订单偏好中$")
    public void 进入订单偏好中() throws Throwable {
        Constant.driverCourier.findElement(By.id("btn_order_preference")).click();
    }

    @Given("^保存偏好设置$")
    public void 保存偏好设置() throws Throwable {
        Constant.driverCourier.findElement(By.id("right_txt")).click();
    }

    @Given("^退出偏好设置$")
    public void 退出偏好设置() throws Throwable {
        Constant.driverCourier.findElement(By.id("custom_title_btn_left")).click();
    }
    @Given("^打开取件、送件距离设置$")
    public void 打开取件送件距离设置() throws Throwable {
        Thread.sleep(3000);
        String btn = Constant.driverCourier.findElement(By.id("pick_delivery_switch")).getAttribute("checked");
        if (btn.equals("false")){
            Constant.driverCourier.findElement(By.id("pick_delivery_switch")).click();//点击取件距离设置开关
        }
    }

    @Given("^关闭取件、送件距离设置$")
    public void 关闭取件送件距离设置() throws Throwable {
        Thread.sleep(2000);
        String btn = Constant.driverCourier.findElement(By.id("pick_delivery_switch")).getAttribute("checked");
        if (btn.equals("true")){
            Constant.driverCourier.findElement(By.id("pick_delivery_switch")).click();//点击取件距离设置开关
        }
    }

    @Given("^设置取件距离：(.*)$")
    public void 设置取件距离(String distance) throws Throwable {
        String dis = Constant.driverCourier.findElement(By.id("tv_pick_distance")).getText();
        System.out.println("当前距离"+dis);
        System.out.println("要调整距离"+distance);
        if (!(dis.contains(distance))){
            if (distance.equals("3.0")){
                System.out.println("调整为0-3km");
                Constant.driverCourier.findElement(By.id("tv_pick_distance")).click();//点击取件距离设置
                Thread.sleep(2000);
                disUp();
                Thread.sleep(2000);
                disDown();
                Thread.sleep(2000);
                Constant.driverCourier.findElement(By.id("btn_ok")).click();//点击确定按钮
            }else if (distance.equals("6.0")){
                System.out.println("调整为3-6km");
                Constant.driverCourier.findElement(By.id("tv_pick_distance")).click();//点击取件距离设置
                disUp();
                Constant.driverCourier.findElement(By.id("btn_ok")).click();//点击确定按钮
            }
        }
    }

    @Given("^主页设置取件距离并保存：(.*)$")
    public void 主页设置取件距离并保存(String distance) throws Throwable {
        进入订单偏好中();
        打开取件送件距离设置();
        设置取件距离(distance);
        保存偏好设置();
        退出偏好设置();
    }

    private void disUp(){
        int width = Constant.driverCourier.manage().window().getSize().width;//手机屏宽
        int height = Constant.driverCourier.manage().window().getSize().height;//手机屏高
        Constant.driverCourier.swipe(width / 2, height * 7 / 8, width / 2, height * 4 / 8, 200);
    }

    private void disDown(){
        List<Integer> location = CommonTools.getControlLocation(Constant.driverCourier,By.className("android.widget.FrameLayout"));
        int x = location.get(0);
        int y = location.get(1);
        int width = location.get(2);
        int height = location.get(3);
        Constant.driverCourier.swipe(x+(width/2),y+(height/2),x+(width/2),y+(height/11*7),300);
    }

    @Given("^设置送件距离为10至25公里$")
    public void 设置送件距离为10至25公里() throws Throwable {
        String btn = Constant.driverCourier.findElement(By.id("pick_delivery_switch")).getAttribute("checked");
        if(btn.equals("true")){
            关闭取件送件距离设置();
            打开取件送件距离设置();
        }
        Constant.driverCourier.findElement(By.id("tv_delivery_distance")).click();
        Constant.driverCourier.swipe(131,2435,556,2445,400);
        Thread.sleep(1000);
        Constant.driverCourier.swipe(1439,2436,1213,2447,400);
        Constant.driverCourier.findElement(By.id("btn_ok")).click();//点击确定
    }

    @Given("^主页设置送件距离为10至25公里并保存$")
    public void 主页设置送件距离为10至25公里并保存() throws Throwable {
        进入订单偏好中();
        打开取件送件距离设置();
        设置送件距离为10至25公里();
        保存偏好设置();
        退出偏好设置();
    }

    @Given("^打开订单目的地设置$")
    public void 打开订单目的地设置() throws Throwable {
        String btn = Constant.driverCourier.findElement(By.id("destination_switch")).getAttribute("checked");
        if (btn.equals("false")){
            Constant.driverCourier.findElement(By.id("destination_switch")).click();//点击取件距离设置开关
        }
    }

    @Given("^关闭订单目的地设置$")
    public void 关闭订单目的地设置() throws Throwable {
        String btn = Constant.driverCourier.findElement(By.id("destination_switch")).getAttribute("checked");
        if (btn.equals("true")){
            Constant.driverCourier.findElement(By.id("destination_switch")).click();//点击取件距离设置开关
        }
    }

    @Given("^设置订单目的地：(.*)$")
    public void 设置订单目的地(String address) throws Throwable {
        Constant.driverCourier.findElement(By.id("tv_destination")).click();//点击目的地位置
        Constant.driverCourier.findElement(By.id("local_search_edit")).sendKeys(address);
        List <WebElement> add = Constant.driverCourier.findElements(By.id("addr_txt"));
        add.get(0).click();//点击检索到的第一个位置
    }

    @Given("^设置订单目的地时间为当前时间$")
    public void 设置订单目的地时间为当前时间() throws Throwable {
        Constant.driverCourier.findElement(By.id("tv_destination_date")).click();//点击选择时间
        Constant.driverCourier.findElement(By.id("tv_sure")).click();//点击确定按钮
    }

    @Given("^主页设置订单目的地并保存：(.*)$")
    public void 主页设置订单目的地并保存目的地(String address) throws Throwable {
        进入订单偏好中();
        打开订单目的地设置();
        设置订单目的地(address);
        保存偏好设置();
        退出偏好设置();
    }


    @Given("^打开不接单区域设置$")
    public void 打开不接单区域设置() throws Throwable {
        String btn = Constant.driverCourier.findElement(By.id("destination_switch")).getAttribute("checked");
        if (btn.equals("false")){
            Constant.driverCourier.findElement(By.id("no_take_order_switch")).click();//点击接单区域设置
        }
    }

    @Given("^关闭不接单区域设置$")
    public void 关闭不接单区域设置() throws Throwable {
        String btn = Constant.driverCourier.findElement(By.id("no_take_order_switch")).getAttribute("checked");
        if (btn.equals("true")){
            Constant.driverCourier.findElement(By.id("no_take_order_switch")).click();//点击接单区域设置
        }

    }

    @Given("^选择北京二环$")
    public void 选择北京二环() throws Throwable {
        String btn = Constant.driverCourier.findElement(By.id("check_area")).getAttribute("checked");
        if (btn.equals("false")){
            Constant.driverCourier.findElement(By.id("check_area")).click();//点击北京二环
        }
    }

    @Given("^主页设置区域围栏并保存$")
    public void 主页设置域围栏并保存() throws Throwable {
        进入订单偏好中();
        打开不接单区域设置();
        选择北京二环();
        保存偏好设置();
        退出偏好设置();
    }

    @Given("^弹出交通方式限制提醒$")
    public void 弹出交通方式限制提醒() throws Throwable {
        String btn = Constant.driverCourier.findElement(By.id("check_area")).getAttribute("checked");
        if (btn.equals("false")){
            Constant.driverCourier.findElement(By.id("check_area")).click();//点击北京二环
        }
    }

    @Given("^打开工作时长间隔$")
    public void 打开工作时长间隔() throws Throwable {
        String btn = Constant.driverCourier.findElement(By.id("sb_work_interval_switch")).getAttribute("checked");
        if (btn.equals("false")){
            Constant.driverCourier.findElement(By.id("sb_work_interval_switch")).click();//点击工作时长间隔
        }
    }

    @Given("^关闭工作时长间隔$")
    public void 关闭工作时长间隔() throws Throwable {
        String btn = Constant.driverCourier.findElement(By.id("sb_work_interval_switch")).getAttribute("checked");
        if (btn.equals("true")){
            Constant.driverCourier.findElement(By.id("sb_work_interval_switch")).click();//点击工作时长间隔
        }
    }


    @Given("^刷新订单信息$")
    public void 刷新订单信息() throws Throwable {
        Constant.driverCourier.findElement(By.id("img_refresh")).click();//点击刷新，同步订单信息
        Thread.sleep(3000);

    }
    @Given("^主页面点击第一个订单$")
    public void 主页面点击第一个订单() throws Throwable {
        Constant.driverCourier.findElement(By.id("status_icon")).click();//点击订单状态图标

    }



    @Given("^点击待抢单$")
    public void 点击待抢单() throws Throwable {
        Constant.driverCourier.findElement(By.id("btn_wait_grab")).click();
    }


}
